package com.example.collection;

import java.util.List;

/**
 * @author 胡帅博
 * @date 2020/9/26 18:11
 *
 * 用于创建固定大小的 存放 TopResult对象的池子
 *
 * 不支持多线程使用
 *
 */
final  public class ObjectPool<T>{

    //第一个元素的位置
    int nextPut=0;
    //最后一个元素的位置
    int nextGet=0;

    //当前池子中元素数量
    int count;

    //缓存池大小
    int capacity;

    Object[] elementDate;



    public ObjectPool(int capacity) {
        this.capacity=capacity;
        elementDate=new Object[this.capacity];
    }

    //判断是否还有元素
    public boolean hasElement(){
        return count>0;
    }

    //判断是否还能放元素
    public boolean hasCapacity(){
        return count<capacity;
    }

    public T borrowObject(){
        if (hasElement()){
            T t=  (T)elementDate[nextGet];
            nextGet=(++nextGet)%capacity;
            count--;
            return t;
        }
        return null;
    }

    public void addObject(T t){
        returnObject(t);
    }


    public void returnObject(T r){
        if (hasCapacity()){
            elementDate[nextPut]=r;
            nextPut=(++nextPut)%capacity;
            count++;
        }
    }


}
